Extensible Messaging and Presence Protocol (XMPP) is an Extensible Markup Language (XML) based communications protocol used for various applications including instant messaging, presence indication, and file transfer. XML streams are used to exchange structured information between XMPP entities. An initial stream may be negotiated between parties and enables unidirectional communication from a first party to a second party. A separate response stream must be negotiated between the second party and the first party in order to enable communication in the opposite direction. Upon completion of negotiations, the party initiating the stream may then send a number of XML stanzas. There are different kinds of stanzas including: message (<message/>), presence (<presence/>), and IQ (<iq/>, short for “Info/Query”). These stanza types provide three different communication primitives: a “push” mechanism for generalized messaging, a specialized “publish-subscribe” mechanism for broadcasting information about network availability, and a “request-response” mechanism for more structured exchanges of data. Reference is made to Saint-Andre, P., “Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence”, RFC 6121, March 2011, incorporated by reference.
At least one problem arises from the fact that a sender must manually re-route messages to other addresses for a contact if that contact's XMPP address is not available to receive messages. Other problems arise from the fact that, while it is possible to exchange messages between XMPP and non-XMPP parties, there is no current way for an XMPP client application to ascertain the validity of, and likely availability of, a non-XMPP based (e.g.: Short Message Service (SMS), Unstructured Supplementary Service Data (USSD), or Voice) consumer of that application's messages.